/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ugc.cnel.manabi.bakenbeans;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectBooleanCheckbox;
import com.icesoft.faces.context.effects.JavascriptContext;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.ugc.cnel.manabi.entidades.Servicio;
import org.ugc.cnel.manabi.entidades.TipoServicio;
import org.ugc.cnel.manabi.jpa.TipoServicioJpaController;
import org.ugc.cnel.manabi.jpa.exceptions.NonexistentEntityException;

/**
 *
 * @author Admin
 */
public class tiposervicioBakenBean implements operaciones {

    private navegacionBakenBean nav;
    private eventosBakenBean ventana;
    private final TipoServicioJpaController tipjpa;
    private List<TipoServicio> lista;
    private boolean btn_save_disable;
    private boolean edit;
    private TipoServicio tiposervicioseleccionado;
    private HtmlInputText txt_descripcion;
    private HtmlSelectBooleanCheckbox chk_estado;
    private final AplicacionBean app_bean;
    

    /** Creates a new instance of tiposervicioBakenBean */
    public tiposervicioBakenBean() {
        FacesContext facescontext = FacesContext.getCurrentInstance();
        app_bean = (AplicacionBean) facescontext.getELContext().getELResolver().getValue(facescontext.getELContext(), null, "AplicacionBean");
        tipjpa = (TipoServicioJpaController) facescontext.getELContext().getELResolver().getValue(facescontext.getELContext(), null, "tipoServicioJPA");
    }

    public boolean isBtn_save_disable() {
        return btn_save_disable;
    }

    public void setBtn_save_disable(boolean btn_save_disable) {
        this.btn_save_disable = btn_save_disable;
    }

    public HtmlSelectBooleanCheckbox getChk_estado() {
        return chk_estado;
    }

    public void setChk_estado(HtmlSelectBooleanCheckbox chk_estado) {
        this.chk_estado = chk_estado;
    }

    public boolean isEdit() {
        return edit;
    }

    public void setEdit(boolean edit) {
        this.edit = edit;
    }

    public List<TipoServicio> getLista() {
        return tipjpa.findTipoServicioEntities();
    }

    public void setLista(List<TipoServicio> lista) {
        this.lista = lista;
    }

    public navegacionBakenBean getNav() {
        return nav;
    }

    public void setNav(navegacionBakenBean nav) {
        this.nav = nav;
    }

    public TipoServicio getTiposervicioseleccionado() {
        return tiposervicioseleccionado;
    }

    public void setTiposervicioseleccionado(TipoServicio tiposervicioseleccionado) {
        this.tiposervicioseleccionado = tiposervicioseleccionado;
    }

    public HtmlInputText getTxt_descripcion() {
        return txt_descripcion;
    }

    public void setTxt_descripcion(HtmlInputText txt_descripcion) {
        this.txt_descripcion = txt_descripcion;
    }

    public eventosBakenBean getVentana() {
        return ventana;
    }

    public void setVentana(eventosBakenBean ventana) {
        this.ventana = ventana;
    }

    public void nuevo(ActionEvent evt) {
        setEdit(false);
        limpiar_text();
        activar_controles();
    }

    public void guardar(ActionEvent evt) {
        try {
            if (getTiposervicioseleccionado() == null) {
                setTiposervicioseleccionado(new TipoServicio());
            }
            TipoServicio tipo_servicio = new TipoServicio(isEdit() ? getTiposervicioseleccionado().getId() : new Integer(0),
                    txt_descripcion.getValue().toString().toUpperCase(),
                    Boolean.parseBoolean(chk_estado.getValue().toString()));
            if (isEdit()) {
                //Editar Tipo Servicio
                tipo_servicio.setServicioCollection(getTiposervicioseleccionado().getServicioCollection());
                tipjpa.edit(tipo_servicio);
            } else {
                //Nuevo Tipo de Servicio
                tipo_servicio.setServicioCollection(new ArrayList<Servicio>());
                tipjpa.create(tipo_servicio);
            }

            app_bean.init();
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Informacion");
            ventana.setPopup_conten("Tipo de Servicio " + (isEdit() ? "Editado" : "Guardado") + " con exito");
            ventana.setPopup_visible(true);
            desactivar_controles();
            limpiar_text();
            //Refescar los servicios del cliente
            getLista();
            setEdit(false);
            //Ir al Scroll donde esta ubicada la tabla
            JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "document.getElementById('form_sistema:new_tiposervicio').scrollIntoView(true);");
        } catch (NonexistentEntityException ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(liquidadorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(liquidadorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
        }
    }

    public void editar(ActionEvent evt) {
        TipoServicio row_tiposervicio = (TipoServicio) evt.getComponent().getAttributes().get("idfila");
        if (row_tiposervicio != null) {
            activar_controles();
            load_data(row_tiposervicio);
            setTiposervicioseleccionado(row_tiposervicio);
            setEdit(true);
        }
    }

    public void borrar(ActionEvent evt) {
        TipoServicio row_tiposervicio = (TipoServicio) evt.getComponent().getAttributes().get("idfila");
        if (row_tiposervicio != null) {
            setTiposervicioseleccionado(row_tiposervicio);
            getVentana().setPopup_header("Advertencia");
            getVentana().setPopup_conten("¿Desea Eliminar el Registro?");
            getVentana().setTipo_ventana(eventosBakenBean.ACEPTAR_CANCELAR);
            getVentana().setPopup_visible(true);
            // Agregar el ActionListener en caso que el boton aceptar sea presionado no se si esta bien pero creo que funciona
            getVentana().limpiar_listener();
            getVentana().getBtn_1().addActionListener(new ActionListener() {

                public void processAction(ActionEvent evt) throws AbortProcessingException {
                    try {
                        tipjpa.destroy(getTiposervicioseleccionado().getId());
                        getLista();
                        limpiar_text();
                        desactivar_controles();
                    } catch (NonexistentEntityException ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar no existe Entidad");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(liquidadorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (Exception ex) {
                        getVentana().setTipo_ventana(eventosBakenBean.CERRAR);
                        getVentana().setPopup_header("Error al Guardar General");
                        getVentana().setPopup_conten(ex.getMessage());
                        getVentana().setPopup_visible(true);
                        Logger.getLogger(liquidadorBakenBean.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
    }

    public void cancelar(ActionEvent evt) {
        limpiar_text();


        desactivar_controles();
        //this.lista.clear();
        //this.btn_nuevo.setDisabled(edit);
        getNav().setPagina_contenido("indicadores/indicadores.jspx");
    }

    public void activar_controles() {
        txt_descripcion.setDisabled(false);
        chk_estado.setDisabled(false);
        setBtn_save_disable(false);
        txt_descripcion.requestFocus();
    }

    public void desactivar_controles() {
        txt_descripcion.setDisabled(true);
        chk_estado.setDisabled(true);
        setBtn_save_disable(true);
    }

    public void limpiar_text() {
        txt_descripcion.setSubmittedValue("");
        chk_estado.setSubmittedValue("false");
    }

    public void load_data(Object item) {
        TipoServicio tiposervicio = (TipoServicio) item;
        txt_descripcion.setSubmittedValue(tiposervicio.getDetalle());
        chk_estado.setSubmittedValue(tiposervicio.getEstado() ? "true" : "false");
        txt_descripcion.requestFocus();
    }
}
